package com.woniu.car.common;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.PutObjectRequest;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class OssUtil {
    private static final String endpoint = "https://oss-cn-chengdu.aliyuncs.com";
    private static final String accessKeyId = "LTAI5tFH94TZTQa2sc4ogenH";
    private static final String accessKeySecret = "W6SwbG12in7K9rnCWnXhhnnbm6asZw";
    private static final String bucketName = "zunjiu";
    private static final String directoryPath = "D:\\log";
    //!!!上传文件的时候记住将objectName存入上传字段中,这样才能提供后续下载!!!!返回值为objectName!!!
    public static String upload(MultipartFile multipartFile) throws IOException {
// 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 创建PutObjectRequest对象。
// 填写Bucket名称、Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
// 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件。
        String name = multipartFile.getOriginalFilename();
        String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String objectName = time + "/" + name;
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName,multipartFile.getInputStream());
// 如果需要上传时设置存储类型和访问权限，请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);

// 上传文件。
        ossClient.putObject(putObjectRequest);

// 关闭OSSClient。
        ossClient.shutdown();
        return objectName;
    }

    public static void download(String objectName){
// 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 下载Object到本地文件，并保存到指定的本地路径中。如果指定的本地文件存在会覆盖，不存在则新建。
// 如果未指定本地路径，则下载后的文件默认保存到示例程序所属项目对应本地路径中。
        String targetName = objectName.split("/")[1];
        String timeDirectory = objectName.split("/")[0];
        //未有文件夹则新建
        if(!new File(directoryPath).exists()){
            new File(directoryPath).mkdir();
        }
        //未有子文件夹(ex:2021-06-16)则新建
        if(!new File(directoryPath+"\\"+timeDirectory).exists()){
            new File(directoryPath+"\\"+timeDirectory).mkdir();
        }

        ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File("D:\\log\\"+timeDirectory+"\\"+targetName));
// 关闭OSSClient。
        ossClient.shutdown();
    }
}
